<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 原型链继承 

        // 利用自定义原型的方式 实现继承 
        //  核心 : 
        //      子类的原型指向父类的实例  
        //  优点:
                // 可以继承父类的属性(构造函数内的)和方法(构造函数原型上的) 
        //  缺点:
                // 继承下来的不在自己身上  而是在原型上  
        
        function Person(name,age){
            this.name = name;
            this.age = age;

        }

        Person.prototype.sayHello = function(){
            console.log('hello world');
        }

        function Student(name,gender){
            this.name = name;
            this.gender = gender;

        }

        // Student的原型 指向 Person的一个实例  
        Student.prototype = new Person('王五',19)


        // 实例化一个子类  

        const s1 = new Student('张三','男');
        console.log(s1);
        console.log(s1.age);
        s1.sayHello();

        // Student 本来没有age属性 和 sayHello 方法 
        // 通过继承  
        // Student的实例 具有了 age属性和 sayHello方法 


    </script>
</body>
</html>